package br.com.vantagensaki.dao.hibernate;

import br.com.vantagensaki.dao.AnuncioDAO;
import br.com.vantagensaki.model.Anuncio;
import br.com.vantagensaki.utils.exception.MetodoNaoInterceptadoException;
import br.com.vantagensaki.utils.exception.ObjetoNaoEncontradoException;
import br.com.vantagensaki.utils.generics.impl.HibernateDaoGenerico;
import br.com.vantagensaki.utils.generics.impl.HibernateDaoGenericoCustomizado;
import java.io.Serializable;
import java.util.List;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Marcello Willians
 */

@Repository(value = "anuncioDAO")
public class AnuncioHibernateDAO extends HibernateDaoGenericoCustomizado<Anuncio, Long> implements AnuncioDAO {

    public AnuncioHibernateDAO() {
        super(Anuncio.class);
    }

    @Override
    public List<Anuncio> getListaOrdenada() {
        String query = "select a from anuncio a order by a.titulo";
        return super.buscarLista(query);
    }

    @Override
    public Anuncio getPorTitulo(String titulo) throws ObjetoNaoEncontradoException {
        String query = "select a from anuncio a where a.titulo=?";
        return super.buscar(query, titulo);
    }
}


//@Repository(value = "cursoDAO")
//public class CursoHibernateDAO extends HibernateDaoGenerico<Curso, Long> implements CursoDAO {
//
//    public CursoHibernateDAO() {
//        super(Curso.class);
//    }
//
//    @MetodoRecupera
//    public Curso getComReconhecimentos(Curso curso) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Long> getListaDeCodigosOrdenados() {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getListaOrdenada() {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getListaOrdenadaPorCodigo() {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getListaOrdenadaComGrauEUnidade() {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getListaOrdenadaDeAtivos() {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getPorGrau(Grau grau) {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getPorUnidade(Unidade unidade) {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getPorGrauENomeComUnidade(Grau grau, String nomeCurso) {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getAtivoPorGrauENome(Grau grau, String nomeCurso) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getAtivoPorGrauECodigo(Grau grau, Long codigo) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getPorGrauECodigoComUnidade(Grau grau, Long codigo) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getPorNome(String nomeCurso) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getPorCodigo(Long codigoCurso) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getPorIdComGrau(Long idCurso) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getPorDesdobramento(Desdobramento d) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Long getMaiorCodigo() throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    public List<Curso> getPorCodigoOuNomeLike(String codigo, String nome) {
//        String hql = " select curso " + //,  " + Constantes.SCHEMA_SIAD + ".disciplina.nomedisciplina " +
//                " from Curso curso " +
//                " left outer join fetch curso.grau" +
//                " where upper(curso.nome) like upper(:nomeParam)";
//
//
//        Long codigoCurso = null;
//        try {
//            codigoCurso = Long.parseLong(codigo);
//            hql += " or curso.codigo = :codigoParam";
//        } catch (NumberFormatException nfe) {
//            //simplesmente n�o acrescenta esse valor a query
//        }
//
//
//        Session session = null;
//        try {
//            session = getSession();
//            Query query = session.createQuery(hql);
//            query.setParameter("nomeParam", "%" + nome + "%");
//
//            if (codigoCurso != null) {
//                query.setParameter("codigoParam", codigoCurso);
//            }
//
//            List<Curso> resultado = query.list();
//
//            return resultado;
//        } finally {
//            session.close();
//        }
//    }
//
////    @MetodoRecuperaLista
//    public List<Curso> getListaOrdenadaEFiltradaParaRelatorio(String tipoOrdenacao, String tipoFiltro, String filtro) {
//
//        boolean parametro = false;
//        StringBuffer hqlBusca = new StringBuffer("select c from Curso c");
//
//        if (tipoFiltro.equals("Grau")) {
//            hqlBusca.append(" where c.grau.nome=?");
//            parametro = true;
//        } else {
//            if (tipoFiltro.equals("Localidade")) {
//                hqlBusca.append(" where c.localidadePrincipal.nome=?");
//                parametro = true;
//            } else {
//                if (tipoFiltro.equals("Possui reconhecimento")) {
//                    hqlBusca.append(" where c.reconhecimentoAtual is ");
//                    if (filtro.equals("Sim")) {
//                        hqlBusca.append("not null");
//                    } else {
//                        hqlBusca.append("null");
//                    }
//                }
//            }
//        }
//
//        hqlBusca.append(" order by");
//
//        if (tipoOrdenacao.equals("C�digo")) {
//            hqlBusca.append(" c.codigo");
//        } else {
//            if (tipoOrdenacao.equals("Nome")) {
//                hqlBusca.append(" c.nome");
//            } else {
//                if (tipoOrdenacao.equals("Grau")) {
//                    hqlBusca.append(" c.grau.nome, c.codigo");
//                } else {
//                    hqlBusca.append(" c.localidadePrincipal.nome, c.codigo");
//                }
//            }
//        }
//
//        Session session = getSession();
//        Query query = session.createQuery(hqlBusca.toString());
//        if (parametro) {
//            query.setParameter(0, filtro);
//        }
//
//        List<Curso> resultado = query.list();
//
//        return resultado;
//    }
//
//    @MetodoRecupera
//    public Curso getComTurnos(Curso curso) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecuperaLista
//    public List<Curso> getPorLocalidade(Localidade localidade) {
//        throw new MetodoNaoInterceptadoException();
//    }
//
//    @MetodoRecupera
//    public Curso getPorNomeELocalidade(String nome, Localidade localidade) throws ObjetoNaoEncontradoException {
//        throw new MetodoNaoInterceptadoException();
//    }
//}
